/**
 * 
 */
package com.code.google.p.jyve.berekeningen;

import java.awt.Color;

/**
 * @author ETZ
 *
 */
public abstract class AbstractBerekening implements Berekening, Berekening.Equivalentable {
	
	protected double mMolariteitOplossing;
	protected double mMolariteitTitrant;
	protected double mVolumeOplossing;
	protected int mTypeStof;
	private String mNaam;
	
	
	private Color mColor;
	
	
	
	/* (non-Javadoc)
	 * @see com.code.google.p.jyve.Berekening#berekenVanuitTitrant(double)
	 */
	@Override
	public abstract double berekenVanuitTitrant(double titrant);

	/* (non-Javadoc)
	 * @see com.code.google.p.jyve.Berekening#getPreferredColor()
	 */
	@Override
	public Color getPreferredColor() {
		return mColor;
	}

	/* (non-Javadoc)
	 * @see com.code.google.p.jyve.Berekening#setMolariteitOplossing(double)
	 */
	@Override
	public void setMolariteitOplossing(double molariteit) {
		mMolariteitOplossing = molariteit;
	}

	/* (non-Javadoc)
	 * @see com.code.google.p.jyve.Berekening#setMolariteitTitrant(double)
	 */
	@Override
	public void setMolariteitTitrant(double molariteit) {
		mMolariteitTitrant = molariteit;

	}

	/* (non-Javadoc)
	 * @see com.code.google.p.jyve.Berekening#setVolumeOplossing(double)
	 */
	@Override
	public void setVolumeOplossing(double volume) {
		mVolumeOplossing = volume;
	}
	
	/* (non-Javadoc)
	 * @see com.code.google.p.jyve.Berekening#setTypeStof(int)
	 */
	@Override
	public void setTypeStof(int type){
		mTypeStof = type;
	}
	
	
	public void setColor(Color color){
		mColor = color;
	}
	
	@Override
	public void setNaamOplossing(String naam) {
		mNaam = naam;
	}
	
	/**
	 * Zet Kz's om naar Kb
	 * @param Kz de kz van een evenwicht
	 * @return de Kb van een zuur-base-evenwicht
	 */
	public static double kzToKb(double kz){
		return KW / kz;
	}
	
	/**
	 * Zet Kb om naar Kz
	 * @param kb De Kb van een evenwicht.
	 * @return De Kz van het betreffende evenwicht.
	 */
	public static double kbToKz(double kb){
		return KW / kb;
	}
	
	public static double[] kbsToKzs(double[] kbs){
		double[] array = new double[kbs.length];
		for (int i = 0; i < kbs.length; i++){
			array[i] = kbToKz(kbs[i]);
		}
		return array;
	}
	
	@Override
	public double[] getEquivalences() {
		
		
		if (this instanceof ZwakkeBerekening){
			ZwakkeBerekening ber = (ZwakkeBerekening)this;
			double[] hoeveelheden = new double[ber.mKz.length];
			for (int i = 0; i < ber.mKz.length; i++){
				hoeveelheden[i] = (i + 1) * mMolariteitOplossing * mVolumeOplossing / mMolariteitTitrant;
			}
			return hoeveelheden;
		}
		else {
			System.out.println("sterke berekening");
		}
		
		return null; // Hoort in deze implementatie niet gebruikt te worden, sorry als je deze wel wil gebruiken.
	}
	
	@Override
	public double getMolariteitOplossing() {
		return mMolariteitOplossing;
	}
	
	@Override
	public double getMolariteitTitrant() {
		return mMolariteitTitrant;
	}
	
	@Override
	public double getVolumeOplossing() {
		return mVolumeOplossing;
	}
	
	@Override
	public String getNaamOplossing() {
		return mNaam;
	}
	
	@Override
	public int getTypeTitrant() {
		return mTypeStof == ZUUR ? BASE : ZUUR;
	}
}
